AppManifestモジュールについて


概要

アプリケーションの設定ファイルを読み書きする機構。

Autoyaのモジュールの一つ。

https://github.com/sassembla/Autoya/tree/master/Assets/Autoya/Manifest



重要な制約として、string以外の型を保持できないようにしてある。


サンプル

https://github.com/sassembla/Autoya/blob/master/Assets/AutoyaSample/10_AppManifest/AppManifest.unity


おまけで、UnityCloudBuild上でビルドした場合、

CloudBuildのパラメータも取り込んだ情報を取得できるようにしてある。(もしかしたら動いてないかも)


あとshellからビルドメッセージを入れたりできる。



用途

アプリケーションの運用に際して、事前に定義したパラメータを管理するのに特化している。

アプリケーションの運用以外に関するパラメータを管理するために使うのは得策では無い。



アプリケーションで保持、管理したいパラメータ

1.ビルド時に決定されるreadonlyなパラメータ

2.ビルド時に初期値が決定され、更新されるパラメータ

3.動作時に新規に追加、上書きされていくパラメータ


だいたいこの三つがあると思う。

AppManifest機構では、1と2を扱う。3はInAppDBなどで扱う。


1.ビルド時に決定されるreadonlyなパラメータ

アプリケーションのバージョン、ビルド時の情報など、

外部から参照して使うのみのパラメータ。


よくタイトル画面に表示したりする。

パラメータ名から値までが完全に決定された状態。



2.ビルド時に初期値として決定され、それ以降更新されるパラメータ

事前にキーが決まっているパラメータ。

外部から参照して使うほか、更新が発生したりする。


事前にキーが決まっており、深度も決定されているが、変更が発生することがあるのが1との違い。


予期されている範囲での変動を保持する。


3.動作時に新規に追加、上書きされていくパラメータ

1,2以外のクライアント側でのpersistantな要素。

要はDB。

キーが増えたり、深度が変わったりする。初期値もあったりなかったり。

真面目な運用を考えるとまあ可変キー、可変深度になると思う。

型も多岐にわたる。



AppManifest

次のような階層構造になっている


AppManifestStore

BuildManifest

ビルド時に決定されるパラメータ集

RuntimeManifest

ビルド時に初期値として決定され、それ以降更新されるパラメータ集

で、


取り出しはAppManifestStore経由で、辞書形式で取得できるようになっている。

RuntimeManifestパラメータに関しては、取り出し -> 変更 -> 上書き、ができる。


read/writeに関する機構は外部から渡すことができる(暗号化/復号化フック書ける)

BuildManifest、RuntimeManifestに使用するデータ型は外部から渡す。



それぞれの保存形式


BuildManifest

実行時書き換え機構を持たないため、まんまResourcesフォルダ以下にjson形式で保存されている。

RuntimeManifest

実行時書き換え機構を持つため、アプリケーションの実行環境に保存される。

保存メソッドは外部から与えることができる。


両方とも、生成元となる型を与えて生成するデータの形状を規定する。

生成元の型情報に初期値をセットすることができる。


重要な制約として、string以外の型を保持できない。



Autoyaでの使用例

Autoyaでは、2つのバージョン値を使ってユーザーの手元のゲームを管理できるようになっている。


appVersion

アプリケーションのバージョン


resVersion

リソースのバージョン


appVersion

appVersionはアプリケーションの実行バイナリの更新でのみ変動するため、

BuildManifestのパタメータとして保持している。

認証がある通信に際して、サーバ側にクライアントアプリのバージョンを通知するために使っている。

サーバはこの通知をもとに、「君のアプリは古い。こっちを使いなさい」とか返答を寄越してくる。



resVersion

resVersionはアプリケーションが現在保持しているDL可能リソース全体のバージョンを表象している。

これはアプリの運用中に変化していく(だいたいincrementされる)ため、

RuntimeManifestのパラメータとして保持している。


認証がある通信に際して、サーバ側にクライアントのDL済みのリソースバージョンを通知するために使っている。

サーバはこの通知をもとに、「君のアプリのリソース情報は古い。こっちを使いなさい」とか返答を寄越してくる。